package com.xiaoma.weblog.example.mybatisplus.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaoma.weblog.example.mybatisplus.mapper.UserMapper;
import com.xiaoma.weblog.example.mybatisplus.model.User;
import com.xiaoma.weblog.example.mybatisplus.service.UserService;
import org.springframework.stereotype.Service;

/**
 * @ClassName UserServiceImpl
 * @Description:
 * @Author: 小马
 * @CreateDate: 2025/4/2 13:58
 * @Version: 1.0
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}

//// 新增数据
//sava(T) : boolean
//// 伪批量插入，实际上是通过 for 循环一条一条的插入
//savaBatch(Collection<T>) : boolean
//// 伪批量插入，int 表示批量提交数，默认为 1000
//savaBatch(Collection<T>, int) : boolean
//// 新增或更新(单条数据)
//saveOrUpdate(T) : boolean
//// 批量新增或更新
//saveOrUpdateBatch(Collection<T>) : boolean
//// 批量新增或更新(可指定批量提交数)
//saveOrUpdateBatch(Collection<T>, int) : boolean

//// 新增数据
//// 实际执行 SQL : INSERT INTO user ( name, age, gender ) VALUES ( '小哈 111', 30, 1 )
//User user = new User();
//user.setName("小马 111");
//user.setAge(30);
//user.setGender(1);
//
//boolean isSuccess = userService.save(user);
//
//// 返回主键ID
//Long id = user.getId();
//System.out.println("isSuccess:" + isSuccess);
//System.out.println("主键 ID: " + id);

//// 批量插入
//List<User> users = new ArrayList<>();
//for (int i = 0; i < 5; i++) {
//User user = new User();
//    user.setName("小马" + i);
//    user.setAge(i);
//    user.setGender(1);
//    users.add(user);
//}
//boolean isSuccess = userService.saveBatch(users);
//System.out.println("isSuccess:" + isSuccess);

//public boolean saveBatch(Collection<T> entityList, int batchSize) {
//    // 获取预编译的插入 SQL
//    String sqlStatement = this.getSqlStatement(SqlMethod.INSERT_ONE);
//    // for 循环执行 insert
//    return this.executeBatch(entityList, batchSize, (sqlSession, entity) -> {
//        sqlSession.insert(sqlStatement, entity);
//    });
//}
//


//// 根据主键 ID 删除 (直接传入 ID)
//int deleteById(Serializable id);
//// 根据主键 ID 删除 (传入实体类)
//int deleteById(T entity);
//// 根据主键 ID 批量删除
//int deleteBatchIds(Collection<?> idList)
//// 通过 Wrapper 条件构造器删除
//int delete(Wrapper<T> queryWrapper);
//// 通过 Map 设置条件来删除
//int deleteByMap(Map<String, Object> columnMap);

//// 构造删除条件
//QueryWrapper wrapper = new QueryWrapper<>();
//wrapper.eq("name", "小马1");
//wrapper.eq("age", 1);
//
//// 实际执行 SQL 为 ：DELETE FROM user WHERE (name = '小马1' AND age = 1)
//userMapper.delete(wrapper);
//
//// Lambda 表达式形式
//userMapper.delete(new QueryWrapper<User>()
//            .lambda()
//            .eq(User::getName, "小马")
//            .eq(User::getAge, 1));

//// 通过 Map 设置条件来删除
//Map<String, Object> columnMap = new HashMap<>();
//columnMap.put("name", "犬小哈1");
//columnMap.put("age", 1);
//
//int count = userMapper.deleteByMap(columnMap);
//System.out.println("受影响的行数:" + count);

//// 根据 entity 条件，删除记录
//boolean remove(Wrapper<T> queryWrapper);
//// 根据 ID 删除
//boolean removeById(Serializable id);
//// 根据 columnMap 条件，删除记录
//boolean removeByMap(Map<String, Object> columnMap);
//// 删除（根据ID 批量删除）
//boolean removeByIds(Collection<? extends Serializable> idList);

//User user = new User();
//user.setName("修改后的小马2");
//user.setGender(0);
//// 组装更新条件，更新 age = 20 的数据
//UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
//updateWrapper.eq("age", 20);
//
//// 实际执行的 SQL : UPDATE user SET name='修改后的小马2', gender=0 WHERE (age = 20)
//int count = userMapper.update(user, updateWrapper);
//System.out.println("受影响的行数：" + count);


//// 根据 ID 来更新，entity 用于设置 ID 以及其他更新条件
//boolean updateById(T entity);
//// wrapper 用于设置更新数据以及条件
//boolean update(Wrapper<T> updateWrapper);
//// entity 用于设置更新的数据，wrapper 用于组装更新条件
//boolean update(T entity, Wrapper<T> updateWrapper);
//// 批量更新
//boolean updateBatchById(Collection<T> entityList);
//// 批量更新，可手动设置批量提交阀值
//boolean updateBatchById(Collection<T> entityList, int batchSize);
//// 保存或者更新
//boolean saveOrUpdate(T entity);

//UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
//// set name = '更新后的犬小哈'
//updateWrapper.set("name", "更新后的犬小哈");
//// where id = 1 AND age = 30
//updateWrapper.eq("id", 1L).eq("age", 30);
//
//// 实际执行 SQL : UPDATE user SET name='更新后的犬小哈' WHERE (id = 1 AND age = 30)
//boolean isSuccess = userService.update(updateWrapper);
//System.out.println("更新是否成功：" + isSuccess);


//QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//// 仅查询 id, name 字段
//queryWrapper.select("id", "name");
//// where id = 1
//queryWrapper.eq("id", 1L);
//
//// 实际执行 SQL : SELECT id,name,age,gender FROM user WHERE (id = 1)
//User user = userMapper.selectOne(queryWrapper);


